import re  # 导入正则表达式模块

# 定义一个函数用于验证输入的货币格式是否正确
def is_valid_currency_format(s):
    # 使用正则表达式匹配数字后面跟着可选的小数点和数字，然后是可选的空格和货币单位CNY或USD
    return re.match(r'^\d+(\.\d+)?\s*(CNY|USD)$', s) is not None

# 定义一个函数用于根据输入的金额和货币单位进行转换
def convert_currency(amount, unit, usd_vs_rmb):
    if unit == 'CNY':
        return amount / usd_vs_rmb  # 如果单位是CNY，将人民币转换为美元
    elif unit == 'USD':
        return amount * usd_vs_rmb  # 如果单位是USD，将美元转换为人民币
    else:
        raise ValueError("Unsupported currency unit")  # 如果货币单位不支持，抛出异常

def currency_converter_v4_0():
    usd_vs_rmb = 6.77  # 定义汇率，这里以6.77作为示例

    while True:  # 开始一个无限循环，直到用户选择退出
        currency_str_value = input('请输入带单位(CNY/USD)的货币金额：')  # 提示用户输入货币金额
        if not is_valid_currency_format(currency_str_value):  # 验证输入的格式
            print("输入的货币格式不正确，请输入数字后跟CNY或USD。")  # 如果格式不正确，提示用户
            continue  # 循环回到下一次输入

        # 使用正则表达式安全地提取金额和货币单位
        amount_str, unit = re.match(r'^\d+(\.\d+)?\s*(CNY|USD)$', currency_str_value).groups()

        try:
            amount = float(amount_str)  # 将字符串形式的金额转换为浮点数
            converted_amount = convert_currency(amount, unit, usd_vs_rmb)  # 调用函数进行货币转换
            print(f'转换后的{unit}金额是：{converted_amount:.2f}')  # 打印转换后的金额
        except ValueError as e:  # 如果转换过程中出现异常，捕获并打印错误信息
            print(e)

        continue_convert = input("是否继续进行货币转换？(y/n): ").strip().lower()  # 询问用户是否继续
        if continue_convert != 'y':  # 如果用户选择不继续，则退出循环
            break

if __name__ == "__main__":
    currency_converter_v4_0()  # 如果这个脚本作为主程序运行，执行货币转换函数